"""
!/usr/bin/env python
-*- coding: utf-8 -*-
@Time    : 2022/5/4 16:25
@Author  : MarkJia
@Site    : 
@File    : 3、postman 使用.py
"""

"""
postman 介绍 : 
    快速构建请求，保存
    提供响应结果的比较功能
    查看测试结果 
    批量运行  - 测试集批量运行
    设置环境变量 - 生产环境/测试环境
"""

# postman 官网下载 ： https://www.postman.com/downloads

"""
宠物商店接口文档分析   ：Swagger ->  https://petstore.swagger.io/    宠物 商店  用户  
宠物的增删改查 - 接口测试用例设计
查询宠物 ：传入状态可以正确获取该状态下的宠物信息  GET  https://petstore.swagger.io/v2/pet/findByStatus   
        参数：status=available    预期结果 ： 接口基本功能正常，响应返回对应状态下宠物信息列表
新增宠物 ：传入宠物信息参数，可以正确新增宠物信息  POST  https://petstore.swagger.io/v2/pet  
        预期结果 ： 接口基本功能正常，响应返回新增的宠物信息
更新宠物 ：传入新宠物信息参数，可以成功修改宠物信息  PUT  https://petstore.swagger.io/v2/pet 
        预期结果 ： 接口基本功能正常，响应返回更新后的宠物信息  
删除宠物 ： 传入宠物id，可以成功删除宠物信息   DELETE   https://petstore.swagger.io/v2/pet/9223372016900014000
        预期结果 ： 接口基础功能正常，响应返回被删除的宠物 id 
    

postman 完成整个接口测试
    1. 创建测试集
    2. 编写断言
    3. 运行测试集合
    4. 查看测试结果
"""

"""
postman 常用断言
验证响应状态码 ： 
    pm.test("响应状态码", function () {
    pm.response.to.have.status(200);
});
验证响应体中是否包含某个字符串
pm.test("响应体包含宠物的 id 信息", function () {
    pm.expect(pm.response.text()).to.include("id");
});
验证 JSON 中的某个值是否等于预期的值
pm.test("响应中的url值正确", function () {
    var jsonData = pm.response.json();
    pm.expect(pm.response.text()).to.include('doggle')
});
验证响应体是否与某个字符串完全相同
pm.test("响应中的url值正确", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.url).to.eql("https://httpbin.testing-studio.com/post");
});
验证响应头信息中的 Content-Type 是否存在
pm.test("响应头信息包含Content-Type", function () {
    pm.response.to.have.header("Content-Type");
});
验证响应时间是否小于某个值
pm.test("响应时间小于200毫秒", function () {
    pm.expect(pm.response.responseTime).to.be.below(200);
});
"""

"""
实战例子进行完整的接口测试练习    -   假设开发没有提供接口文档，进行接口测试场景
目录：
一、LiteMall搜索接口抓包分析   http://litemall.hogwarts.ceshiren.com/vue/index.html#/   的搜索接口，
            用 F12 抓包抓取，梳理成文档格式。和开发确认：URL， 请求方式 ， 请求参数：（必填参数、类型、长度）， 响应示例， 响应字段
二、LiteMall搜索接口测试用例设计
    1、====   基本功能流程测试   =====
    2、====   基于输入域的测试（空、空格、超长、特殊字符、默认值检验、判定表方式：组合参数校验） =====  
    3、====   异常场景：多余的参数、错误的请求方法  =====
    测试用例：用例编号、所属模块、测试标题、优先级、前置条件、URL、请求方法、请求参数、预期结果、实际结果
三、Postman 完成接口测试
    1、浏览器保存 Har 格式，导入 postman 测试集  2、创建测试集  3、创建接口测试用例 
四、数据驱动：
    准备数据 ： JSON 或者 CSV 格式
    修改参数设置
    修改断言
    在测试集中定义数据变量
    运行测试集，选择准备好的数据
五、测试集的导入和导出
六、使用 cookies  -> 前面接口请求头会自动传入系统中，后面遇到相同的域名 postman 会自动填充
七、鉴权方式  token ：  （下一个接口使用时，添加到下一个接口 请求参数 和 请求头 中）
    1、发送请求后，在断言中设置代码
        //获取响应数据的 json 对象
        var jsonData = pm.response.json();
        //从 json 对象中提取 token 值
        var token = jsonData.data.token;
        //把 token 值设置为测试集变量
        pm.collectionVariables.set("token",token)
    2、在测试集 -> Variables 中查看
    3、其他接口引用 ：
        单接口 ： 在 Authorization -> 选择 API Key- 键值对引用{{token}} 
        测试集设置 ： 脚本方式   测试集下的所有接口   
八、参数传递
    1.创建登录接口
    2.成功后在 Test 中提取 token
    3.保存 token 到测试集变量
九、设置鉴权
十、请求前脚本中获取参数
十一、导出代码
    最右侧 ：  点击 </>
"""
